package com.xingxue.logistics.service;

import com.xingxue.logistics.common.vo.MenuTreeNode;
import com.xingxue.logistics.common.vo.TreeNode;
import com.xingxue.logistics.common.vo.UserRoleNode;
import com.xingxue.logistics.common.vo.UserTreeNode;
import com.xingxue.logistics.dao.domain.SysMenu;
import com.xingxue.logistics.dao.domain.SysRole;

import java.util.List;

/**
 * @author Kris at 2018/10/9 17:15
 */
public interface LimitService {

    /**
     * 根据角色ID查询菜单ID
     * @param roleId
     * @return
     */
    List<Integer> loadMenuIdByRoleId(Integer roleId);

    /**
     * 根据角色ID查询菜单ID
     * @param roleIds
     * @return
     */
    List<Integer> loadMenuIdByRoleId(List<Integer> roleIds);

    /**
     * 根据菜单ID加载菜单
     * @param menuIds
     * @return
     */
    List<SysMenu> loadMenuByIds(List<Integer> menuIds);

    /**
     * 根据用户ID查询角色ID
     * @param userId
     * @return
     */
    List<Integer> loadRoleIdByUserId(Integer userId);

    /**
     * 根据用户ID查询角色
     * @param userId
     * @return
     */
    List<SysRole> loadRoleByIds(List<Integer> roleIds);

    /**
     * 根据角色ID加载菜单树
     * <br/><b>注意：将加载所有的菜单，并且有权限的菜单checked为true</b>
     * @param roleId
     * @return
     */
    List<TreeNode> loadRoleMenuTree(Integer roleId);

    /**
     * 维护角色菜单关联关系
     * @param roleId
     * @param menuIds
     * @param checked
     * @return
     */
    boolean saveRoleMenu(Integer roleId, List<Integer> menuIds, Boolean checked);

    boolean saveRoleUser(Integer userId, List<Integer> roleIds, Boolean checked);


    List<UserRoleNode> loadRoleUserTree(Integer roleId);

    List<UserTreeNode> RoleUserTree(Integer roleId);

    List<MenuTreeNode> loadRoleMenuTree2(Integer roleId);
}
